package models

import (
	"github.com/gofiber/fiber/v2"
)

// APIResponse 统一的API响应结构
type APIResponse struct {
	Success bool        `json:"success"` // 是否成功
	Message string      `json:"message"` // 消息
	Data    interface{} `json:"data"`    // 数据
}

// Success 成功响应
func Success(c *fiber.Ctx, data interface{}) error {
	return c.JSON(APIResponse{
		Success: true,
		Message: "success",
		Data:    data,
	})
}

// SuccessWithMessage 带自定义消息的成功响应
func SuccessWithMessage(c *fiber.Ctx, message string, data interface{}) error {
	return c.JSON(APIResponse{
		Success: true,
		Message: message,
		Data:    data,
	})
}

// Error 错误响应
func Error(c *fiber.Ctx, code int, message string) error {
	return c.Status(code).JSON(APIResponse{
		Success: false,
		Message: message,
		Data:    nil,
	})
}

// BadRequest 400错误
func BadRequest(c *fiber.Ctx, message string) error {
	return Error(c, 400, message)
}

// NotFound 404错误
func NotFound(c *fiber.Ctx, message string) error {
	return Error(c, 404, message)
}

// Unauthorized 401错误
func Unauthorized(c *fiber.Ctx, message string) error {
	return Error(c, 401, message)
}

// InternalServerError 500错误
func InternalServerError(c *fiber.Ctx, message string) error {
	return Error(c, 500, message)
}

// ErrorHandler 全局错误处理器
func ErrorHandler(c *fiber.Ctx, err error) error {
	code := fiber.StatusInternalServerError

	if e, ok := err.(*fiber.Error); ok {
		code = e.Code
	}

	return c.Status(code).JSON(APIResponse{
		Success: false,
		Message: err.Error(),
		Data:    nil,
	})
}
